<!DOCTYPE html>
<html>

<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
	<meta name="theme-color" content="#33474d">
	<title>DNS服务器(一)：基本原理 | 失落的乐章</title>
	<link rel="stylesheet" href="/css/style.css" />
	
      <link rel="alternate" href="/atom.xml" title="失落的乐章" type="application/atom+xml">
    
</head>

<body>

	<header class="header">
		<nav class="header__nav">
			
				<a href="/archives" class="header__link">Archive</a>
			
				<a href="/tags" class="header__link">Tags</a>
			
				<a href="/atom.xml" class="header__link">RSS</a>
			
		</nav>
		<h1 class="header__title"><a href="/">失落的乐章</a></h1>
		<h2 class="header__subtitle">技术面前，永远都是学生。</h2>
	</header>

	<main>
		<article>
	
		<h1>DNS服务器(一)：基本原理</h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/DNS/">DNS</a>
			</span>
		
	</div>

	

	
		<h2 id="一、简介"><a href="#一、简介" class="headerlink" title="一、简介"></a>一、简介</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;网络中的主机通信是通过IP地址来实现的，通常IPv4的地址是四个数字加点组成，如果和每台主机通信我们都要去记忆IP地址的话，这通常对于人类来讲是相当痛苦的。于是网络上就有了一套为了解决这个问题的方案出现了，也就是DNS主机名称解析系统。它是一套能够将数以千万计的IP地址通过查询DNS数据库，轻松的转化成与之对应的一串单词字符串，也就是主机名，网络上称之为域名，相对于IP地址，用单词组成的域名明显好记多了。</p>
<h2 id="二、DNS域名解析系统的层级关系"><a href="#二、DNS域名解析系统的层级关系" class="headerlink" title="二、DNS域名解析系统的层级关系"></a>二、DNS域名解析系统的层级关系</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;DNS域名解析系统是有层级关系的，整个层级关系的表现形式就像一棵大树，每一层，我们称之为域。最顶层的域我们通常叫作根域，用点号表示，第二层通常用com、net、edu、gov、mil、org….，这层我们叫作顶级域，往下第三层，也就是我们经常见到的域名了，如,51cto.com，这一层我们称之为二级域，当二级域加上www后，就是第四层了，就这样一直往下细分。域名的写法通常是由小到大，从左往右书写，用点连接，最后加点表示根，整个结构如下图所示：</p>
<p><figure class="figure"><img src="https://github.com/hcldirgit/image/blob/master/DNS%E6%9C%8D%E5%8A%A1%E5%99%A8(%E4%B8%80" alt=""></figure>%EF%BC%9A%E5%9F%BA%E6%9C%AC%E5%8E%9F%E7%90%86/01.jpeg?raw=true)</p>
<h2 id="三、DNS的资源记录"><a href="#三、DNS的资源记录" class="headerlink" title="三、DNS的资源记录"></a>三、DNS的资源记录</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;我们要查询这些庞大数据当然要有专门的主机负责这些工作了，提供查询、存储DNS数据服务的主机我们称之为DNS服务器。网络上为了方便域名的注册、管理、解析，将DNS域名映射到特定类型的资源信息，我们称之为资源记录。资源记录是有类型的，</p>
<h3 id="资源记录类型"><a href="#资源记录类型" class="headerlink" title="资源记录类型"></a>资源记录类型</h3><table>
<thead>
<tr>
<th style="text-align:center">SOA</th>
<th style="text-align:center">NS</th>
<th style="text-align:center">MX</th>
<th style="text-align:center">A</th>
<th style="text-align:center">PTR</th>
<th style="text-align:center">AAAA</th>
<th style="text-align:center">CNAME</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">起始授权</td>
<td style="text-align:center">域名服务器</td>
<td style="text-align:center">邮件交换器</td>
<td style="text-align:center">域名–&gt;IP</td>
<td style="text-align:center">IP–&gt;域名</td>
<td style="text-align:center">域名–&gt;IPv6</td>
<td style="text-align:center">别名记录</td>
</tr>
<tr>
<td style="text-align:center">特点：只能有一个，而且必须是第一个</td>
<td style="text-align:center">特点：用于表示DNS服务器的域名地址</td>
<td style="text-align:center">特点：用于一个域下的邮件使用</td>
<td style="text-align:center">特点：我们经常用到的就是它了</td>
<td style="text-align:center">特点：和A记录相反，用于反向解析</td>
<td style="text-align:center">特点：基本不用</td>
<td style="text-align:center">特点：用于作A记录的域名的别名，</td>
</tr>
</tbody>
</table>
<h2 id="四、DNS服务器的工作原理"><a href="#四、DNS服务器的工作原理" class="headerlink" title="四、DNS服务器的工作原理"></a>四、DNS服务器的工作原理</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;假设我们以wubinary.blog.51cto.com为例：</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;第一步：当我们使用DNS客户端请求查询此域名的的A记录时，DNS服务器首先会判断所要查询域名是属于哪个区域，是否在自己的管辖范围，假设此次域名不在管辖范围。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;第二步：为了确定当前域名是在哪个级别，DNS服务器要向根询求帮助，根会向DNS服务器返回所在域名的顶级域的DNS服务器地址，也就是根的下一级com的DNS服务器地址。此时DNS服器根据这个地址又再次查询，此次查询获得了51cto.com的DNS的服务器地址。于是终于确定了wubinary.blog.51cto.com的区域所在的DNS服务器地址了。DNS服务器的此类确定一个地址，并使用这个址去查询下一个的查询方式我们称之为<strong>迭代查询</strong>。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;第三步：确定了区域地址后，51cto.com为了向DNS服务器返回结果需要一级一级的往下查。一开始查询到了blog.51cto.com的DNS服务器地址，于是blog.51cto.com的DNS服务器则向下查询。blog.51cto.com又查询到了wubinary.blog.51cto.com的DNS服务器地址，此时的地址正是DNS服务器要找的地址。到了这一步，wubinary.blog.51cto.com的DNS服务器则会把结果向它的上级汇报，于是上一级又向上一级汇报，最终结果回到了最初的DNS服务器，此时DNS客户端才能获得最终的IP地址。像这样DNS服务器的数据逐级遍历及逐级返回的过程，我们称之为<strong>递归查询</strong>。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;如果我们查询的域名正好和当前查询使用的DNS服务器所匹配，则DNS服务器会先查询本地缓存是否存在，如果存在则返回缓存数据，如果不存在则去数据文件中读取数据并运回结果。</p>
<h2 id="五、三个与解析有关的配置文件"><a href="#五、三个与解析有关的配置文件" class="headerlink" title="五、三个与解析有关的配置文件"></a>五、三个与解析有关的配置文件</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/etc/hosts：此文件早期在没有出现DNS服务器的时候，作用和DNS服务器类似，不过随着网络的发展，单个文件根本无法满足需求，于是，此文件通常运用于本地IP解析。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/etc/resolv.conf：定义DNS服务器IP地址，本地解析域名通常使用的都是这里面定义的IP地址。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/etc/nsswitch.conf：这个文件则是来决定先要使用/etc/hosts还是/etc/resolv.conf的设置。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;总结：理解DNS的树状结构、递归及迭代查询后，其它就好办了。</p>

	

	
		<span class="different-posts"><a href="/2017/10/12/Dns、Iredmaill/7. DNS服务器(一)：基本原理/" onclick="window.history.go(-1); return false;">⬅️ Go back </a></span>

	

</article>

	</main>

	<footer class="footer">
	<div class="footer-content">
		
	      <div class="footer__element">
	<p>Hi there, <br />welcome to my Blog glad you found it. Have a look around, will you?</p>
</div>

	    
	      <div class="footer__element">
	<h5>Check out</h5>
	<ul class="footer-links">
		<li class="footer-links__link"><a href="/archives">Archive</a></li>
		
		  <li class="footer-links__link"><a href="/atom.xml">RSS</a></li>
	    
		<li class="footer-links__link"><a href="/about">about page</a></li>
		<li class="footer-links__link"><a href="/tags">Tags</a></li>
		<li class="footer-links__link"><a href="/categories">Categories</a></li>
	</ul>
</div>

	    

		<div class="footer-credit">
			<span>© 2017 失落的乐章 | Powered by <a href="https://hexo.io/">Hexo</a> | Theme <a href="https://github.com/HoverBaum/meilidu-hexo">MeiliDu</a></span>
		</div>

	</div>


</footer>



</body>

</html>
